import { Component, OnInit } from '@angular/core';


import {parse,stringify} from 'yaml';


  @Component({
  selector: 'app-book',
  templateUrl: './book.component.html',
  styleUrls: ['./book.component.css']
})
export class BookComponent implements OnInit {

    constructor() {
    }

    public init:any={
      modal:true,
      v:"",
      import_str:()=>{
        this.YamlObject=parse(this.init.v);
        this.init.modal=false;
      }
    }

    public export_yaml(){
      this.show_stringify=true;
      this.stringify=stringify(this.YamlObject);
    }
    public stringify:any;
    public show_stringify:boolean=false;

    public tabIndex=0;

    public isObject(un:any):boolean{
      if(typeof un =="object"){
        return true;
      }
      return false;
    }

    public files:any={
      modal:false,
      addItem:(object:any)=>{
        let tmp:any={};
        tmp[object.k]=object.v;
        this.YamlObject.files.push(tmp);
        this.files.modal=false;
      },
      delItem:(i:any)=>{
        this.YamlObject.files.splice(i,1);
      }
    }

    public game:any={
      modal:false,
      addItem:(obj:any)=>{
        this.YamlObject.game[obj.k]=obj.v;
        this.game.modal=false;
      },
      delItem:(k:any)=>{
        delete this.YamlObject.game[k];
      },
    };


    public installer:any={
      modal: false,
      sonModal: {
        title:"",
        fi:false,
        arrIndex:"",
        ObjKey:"",
        openModal:(title:any,arrIndex:any,ObjKey:any)=>{
          this.installer.sonModal.title=title;
          this.installer.sonModal.arrIndex=arrIndex;
          this.installer.sonModal.ObjKey=ObjKey;
          // 添加一个数组[ key:{key:v},...]
          this.installer.sonModal.fi=true;
        }
      },
      addItem:(object:any)=>{
        //添加数组
        let tmp:any={};
        tmp[object.k]=object.v_obj;
        this.YamlObject.installer.push(tmp);
        this.installer.modal=false;
      },
      addSonItem:(object:any)=>{
        //添加儿子数组
        this.YamlObject.installer[this.installer.sonModal.arrIndex][this.installer.sonModal.ObjKey][object.k]=object.v;
        this.installer.sonModal.fi=false;
      },
      delItem:(i:any)=>{
        this.YamlObject.installer.splice(i,1);
      },
      delSonItem:(arrIndex:any,ObjKey:any,ObjectSonKey:any)=>{
        delete this.YamlObject.installer[arrIndex][ObjKey][ObjectSonKey];
      },
    }



    public system={
      f:{
        modal:false,
        del:(key:any)=>{
          delete this.YamlObject.system[key];
        },
        add:(object:any)=>{
          this.YamlObject.system[object.k]={};
          this.system.f.modal=false;
        }
      },
      s:{
        modal:false,
        key:"",
        son_key:"",
        del:(key:any,son_key:any)=>{
          delete this.YamlObject.system[key][son_key];
        },
        openModal:(key:any)=>{
          this.system.s.key=key;
          this.system.s.modal=true;
        },
        add:(object:any)=>{
          this.YamlObject.system[this.system.s.key][object.k]=object.v
          this.system.s.modal=false;
        }
      }
    }

    public wine={
      f:{
        modal:false,
        del:(key:any)=>{
          delete this.YamlObject.wine[key];
        },
        add:(obj:any)=>{
          this.wine.f.modal=false;
          try{
            JSON.parse(obj.v)
          }catch (e){
            this.YamlObject.wine[obj.k]=obj.v;
            return;
          }
          this.YamlObject.wine[obj.k]=JSON.parse(obj.v);
        },
      },
      s:{
        modal:false,
        key:"",
        son_key:"",
        del:(key:any,son_key:any)=>{
          delete this.YamlObject.wine[key][son_key];
        },
        openModal:(key:any)=>{
          this.wine.s.key=key;
          this.wine.s.modal=true;
        },
        add:(object:any)=>{
          this.YamlObject.wine[this.wine.s.key][object.k]=object.v
          this.wine.s.modal=false;
        }
      }
    }



  ngOnInit(): void {
    console.log(this.YamlObject);
  }

  public getKeys(object:any){
    return Object.keys(object);
  }


  public  downloadFile(fileName:any, content:any){
      var aLink = document.createElement('a');
      var blob = new Blob([content]);
      var evt = document.createEvent("HTMLEvents");
      // initEvent 不加后两个参数在FF下会报错, 感谢 Barret Lee 的反馈
      evt.initEvent("click", false, false);
      aLink.download = fileName;
      aLink.href = URL.createObjectURL(blob);
      aLink.dispatchEvent(evt);
    }

  public YamlObject:any={
      "files": [{
        "setup": "N/A:选择游戏安装包（exe或msi，压缩包请解压后使用）"
      }, {
        "dx-dlls": "https://file.winegame.net/games/uplay/dx-dlls.tar.xz"
      }],
      "game": {
        "exe": "drive_c/windows/explorer.exe",
        "prefix": "$GAMEDIR"
      },
      "installer": [{
        "execute": {
          "command": "fetch() { dir=\"$HOME/.cache/$(dirname \"$1\")\"; file=\"$(basename \"$1\")\"; path=\"$HOME/.cache/$1\"; url=\"https://file.winegame.net/cache/$1\"; mkdir -p \"$dir\"; aria2c --allow-overwrite=true --summary-interval=1 -x 5 -s 5 -c -d \"$dir\" -o \"$file\" \"$url\" || wget -c -O \"$path\" \"$url\"; }; fetch wine/wine-mono-5.1.0-x86.msi; fetch wine/wine-gecko-2.47.1-x86_64.msi; fetch wine/wine-gecko-2.47.1-x86.msi; fetch wine/fonts/MicrosoftYaHeiMono.tar.gz;",
          "description": "下载字体和运行库"
        }
      }, {
        "task": {
          "arch": "win64",
          "description": "创建64位Wine前缀",
          "name": "create_prefix",
          "prefix": "$GAMEDIR"
        }
      }, {
        "extract": {
          "description": "解压CMD字体",
          "dst": "$GAMEDIR/drive_c/windows/Fonts",
          "file": "$HOME/.cache/wine/fonts/MicrosoftYaHeiMono.tar.gz"
        }
      }, {
        "task": {
          "description": "安装CMD字体",
          "filename": "$GAMEDIR/drive_c/windows/Fonts/MicrosoftYaHeiMono.reg",
          "name": "set_regedit_file"
        }
      }, {
        "execute": {
          "command": "rm -f \"$GAMEDIR/dosdevices/m::\"; ln -sf \"$HOME\" \"$GAMEDIR/dosdevices/m:\"",
          "description": "添加主目录($HOME)为M盘"
        }
      }, {
        "execute": {
          "command": "cd \"$GAMEDIR/drive_c\" && tar -Jvxf \"$dx-dlls\"",
          "description": "解压 DX DLL"
        }
      }, {
        "task": {
          "description": "启动游戏安装程序",
          "executable": "setup",
          "name": "wineexec",
          "prefix": "$GAMEDIR"
        }
      }, {
        "task": {
          "name": "winekill",
          "prefix": "$GAMEDIR"
        }
      }],
      "system": {
        "env": {
          "DXVK_HUD": "compiler",
          "DXVK_STATE_CACHE_PATH": "$GAMEDIR",
          "MESA_GL_VERSION_OVERRIDE": "4.4COMPAT",
          "STAGING_SHARED_MEMORY": 1,
          "__GL_SHADER_DISK_CACHE": 1,
          "__GL_SHADER_DISK_CACHE_PATH": "$GAMEDIR"
        }
      },
      "wine": {
        "dxvk": true,
        "esync": true,
        "overrides": {
          "XAPOFX1_0": "n,b",
          "api-ms-win-core-privateprofile-l1-1-0": "n,b",
          "atl100": "n,b",
          "concrt140": "n,b",
          "d3dcompiler_33": "n,b",
          "d3dcompiler_34": "n,b",
          "d3dcompiler_35": "n,b",
          "d3dcompiler_36": "n,b",
          "d3dcompiler_37": "n,b",
          "d3dcompiler_38": "n,b",
          "d3dcompiler_39": "n,b",
          "d3dcompiler_40": "n,b",
          "d3dcompiler_41": "n,b",
          "d3dcompiler_42": "n,b",
          "d3dcompiler_43": "n,b",
          "d3dcompiler_46": "n,b",
          "d3dcompiler_47": "n,b",
          "d3dcsx_42": "n,b",
          "d3dcsx_43": "n,b",
          "d3dcsx_47": "n,b",
          "d3dx10": "n,b",
          "d3dx10_33": "n,b",
          "d3dx10_34": "n,b",
          "d3dx10_35": "n,b",
          "d3dx10_36": "n,b",
          "d3dx10_37": "n,b",
          "d3dx10_38": "n,b",
          "d3dx10_39": "n,b",
          "d3dx10_40": "n,b",
          "d3dx10_41": "n,b",
          "d3dx10_43": "n,b",
          "d3dx11_42": "n,b",
          "d3dx11_43": "n,b",
          "d3dx9_24": "n,b",
          "d3dx9_25": "n,b",
          "d3dx9_26": "n,b",
          "d3dx9_27": "n,b",
          "d3dx9_28": "n,b",
          "d3dx9_29": "n,b",
          "d3dx9_30": "n,b",
          "d3dx9_31": "n,b",
          "d3dx9_32": "n,b",
          "d3dx9_33": "n,b",
          "d3dx9_34": "n,b",
          "d3dx9_35": "n,b",
          "d3dx9_36": "n,b",
          "d3dx9_37": "n,b",
          "d3dx9_38": "n,b",
          "d3dx9_39": "n,b",
          "d3dx9_40": "n,b",
          "d3dx9_41": "n,b",
          "d3dx9_42": "n,b",
          "d3dx9_43": "n,b",
          "ddraw": "n,b",
          "mfc100": "n,b",
          "mfc100chs": "n,b",
          "mfc100cht": "n,b",
          "mfc100deu": "n,b",
          "mfc100enu": "n,b",
          "mfc100esn": "n,b",
          "mfc100fra": "n,b",
          "mfc100ita": "n,b",
          "mfc100jpn": "n,b",
          "mfc100kor": "n,b",
          "mfc100rus": "n,b",
          "mfc100u": "n,b",
          "mfc140": "n,b",
          "mfc140chs": "n,b",
          "mfc140cht": "n,b",
          "mfc140deu": "n,b",
          "mfc140enu": "n,b",
          "mfc140esn": "n,b",
          "mfc140fra": "n,b",
          "mfc140ita": "n,b",
          "mfc140jpn": "n,b",
          "mfc140kor": "n,b",
          "mfc140rus": "n,b",
          "mfc140u": "n,b",
          "mfcm100": "n,b",
          "mfcm100u": "n,b",
          "mfcm140": "n,b",
          "mfcm140u": "n,b",
          "msvcp100": "n,b",
          "msvcp140": "n,b",
          "msvcr100": "n,b",
          "nvapi,nvapi64": "disabled",
          "vcamp140": "n,b",
          "vccorlib140": "n,b",
          "vcomp100": "n,b",
          "vcomp140": "n,b",
          "vcruntime140": "n,b",
          "winedbg.exe": "disabled",
          "x3daudio1_0": "n,b",
          "x3daudio1_1": "n,b",
          "x3daudio1_2": "n,b",
          "x3daudio1_3": "n,b",
          "x3daudio1_4": "n,b",
          "x3daudio1_5": "n,b",
          "x3daudio1_6": "n,b",
          "x3daudio1_7": "n,b",
          "xactengine2_0": "n,b",
          "xactengine2_1": "n,b",
          "xactengine2_10": "n,b",
          "xactengine2_2": "n,b",
          "xactengine2_3": "n,b",
          "xactengine2_4": "n,b",
          "xactengine2_5": "n,b",
          "xactengine2_6": "n,b",
          "xactengine2_7": "n,b",
          "xactengine2_8": "n,b",
          "xactengine2_9": "n,b",
          "xactengine3_0": "n,b",
          "xactengine3_1": "n,b",
          "xactengine3_2": "n,b",
          "xactengine3_3": "n,b",
          "xactengine3_4": "n,b",
          "xactengine3_5": "n,b",
          "xactengine3_6": "n,b",
          "xactengine3_7": "n,b",
          "xapofx1_1": "n,b",
          "xapofx1_2": "n,b",
          "xapofx1_3": "n,b",
          "xapofx1_4": "n,b",
          "xapofx1_5": "n,b",
          "xaudio2_0": "n,b",
          "xaudio2_1": "n,b",
          "xaudio2_2": "n,b",
          "xaudio2_3": "n,b",
          "xaudio2_4": "n,b",
          "xaudio2_5": "n,b",
          "xaudio2_6": "n,b",
          "xaudio2_7": "n,b",
          "xinput1_1": "n,b",
          "xinput1_2": "n,b",
          "xinput1_3": "n,b"
        },
        "vkd3d": true
      }
    };
}
